package productos;

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;

import org.junit.Before;
import org.junit.Test;

import categoriasYunidadesDeMedida.UnidadDeMedida;

public class TestPresentacion {
	
	Presentacion presentacion;
	Stock stock;
	Producto producto;
	Ubicacion ubicacion;
	UnidadDeMedida unidadDeMedida;
	

	@Before
	public void setUp() throws Exception {
		producto = mock(Producto.class);
		stock = mock(Stock.class);
		presentacion = new Presentacion("unCodigoDeBarra",producto,stock);	
	}

	@Test
	public void testInstancioUnaPresentacionYVerificoSusColaboradoresInternos() {
		assertNotNull(presentacion.id());
	}
	
	@Test
	public void testLeAgregoUnaUbicacionAUnaPresentacionYLaVerifico(){
		ubicacion = mock(Ubicacion.class);
		presentacion.setUbicacion(ubicacion);
		assertNotNull(presentacion.getUbicacion());
	}
	
	@Test
	public void testLeAgregoUnPrecioUnitarioVentaYLoVerifico(){
		presentacion.setPrecioUnitarioVenta(10.0d);
		assertNotNull(presentacion.precioParaConsumidor());
	}
	
	@Test
	public void testLeAgregoUnaUnidadDeMedida(){
		unidadDeMedida = mock(UnidadDeMedida.class);
		presentacion.setUnidadDeMedida(unidadDeMedida);
		assertNotNull(presentacion.unidadDeMedida());
	}
	
	@Test
	public void testVerificoQueUnaPresentacionEstePorDebajoDelStockMinimo(){
		when(stock.porDebajoStockMinimo()).thenReturn(true);
		assertTrue(presentacion.porDebajoStockMinimo());
	}	

	@Test
	public void testVerificoQueUnaPresentacionEstePorDebajoDelStockCritico(){
		when(stock.porDebajoStockCritico()).thenReturn(true);
		presentacion.setUnidadDeMedida(unidadDeMedida);
		assertTrue(presentacion.porDebajoStockCritico());
	}
	
	@Test
	public void testStockDisponible(){
		when(stock.getCantidadStock()).thenReturn(1);
		assertTrue(presentacion.stockDisponible(1));
	}
}
